import axios from 'axios'
import qs from 'qs'
import router from '../router'
import Vue from 'vue'
const bus = new Vue()
const request = axios.create({
  baseURL: '/snoopy',
  timeout: 2000
})

// 请求拦截
request.interceptors.request.use(function (config) {
  // 发送ajax请求出现loading加载页面
  bus.$showLoading()
  // 如果是Post请求且有参数，使用qs将传过去的json数据转换成对象，stringify()
  if (config.method === 'post' && config.data) {
    config.data = qs.stringify(config.data)
  }
  // 往请求头中添加token
  const accessToken = localStorage.getItem('access_token')
  config.headers['access-token'] = accessToken
  return config
}, function (error) {
  return Promise.reject(error)
})

// 响应拦截
request.interceptors.response.use(function (response) {
  // 请求完成后让loading页面消失，加载完毕
  bus.$hideLoading()
  // 做token的过期处理，如果说长时间未操作页面，那么久会进行token更新，这时候会比较新老token,不一致时会响应信息为401
  if (response.data.code === 401) {
    // 去登录页面重新获取token，刷新token
    router.push('/login')
  }
  return response
}, function (error) {
  return Promise.reject(error)
})

export default request
